lexer grammar AnalexJava;

options
 {
 	k=5;
 	backtrack = true;
 }

REGISTRO: 'CB' | 'CT' | 'PB' | 'PT' | 'SB' | 'ST' | 'HB' | 'HT' | 'LB' | 'L1' | 'L2' | 'L3' | 'L4' | 'L5' | 'L6' | 'CP';

LOAD    : 'LOAD';
LOADA   : 'LOADA';
LOADI   : 'LOADI';
LOADL   : 'LOADL';
STORE   : 'STORE';
STOREI  : 'STOREI';
CALL    : 'CALL';
CALLI   : 'CALLI';
RETURN  : 'RETURN';
PUSH    : 'PUSH';
POP     : 'POP';
JUMP    : 'JUMP';
JUMPI   : 'JUMPI';
JUMPIF  : 'JUMPIF';
HALT    : 'HALT';

INT
	: 'int';
LONG 
	: 'long';
RETURN2
	: 'return';
BLANCO
	: (' ' | '\t' | '\n' | '\r')
	{ $channel=HIDDEN; }
	;
	
COMENTARIO
	: ('--' ( options {greedy=false;} : . )* BLANCO)
	{ $channel=HIDDEN; }
	;
	
fragment LETRA
	:('a'..'z'
	| 'A'..'Z'
	| '_')
	;

fragment DIGITO
    :    '0'..'9'
    ;

ABRETAGINI 	: '<' ;	
ABRETAGFIN	: '</' ;
CIERRATAG	: '>' ;
ABRELLAVE	: '{' ;
CIERRALLAVE	: '}' ;
PUNTOYCOMA	: ';' ;
DOSPUNTOS	: ':' ;
COMA		: ',' ;
OR			: '|' ;
ABREPAR		: '(' ;
CIERRAPAR	: ')' ;
ABRECOR   	: '[' ;
CIERRACOR 	: ']' ;
AND 		: '&' ;
IGUAL 		: '=' ;			
DOSPNTOIGUAL: ':=' ;	
MAS			: '+' ;
MENOS		: '-' ;
MULTIPLICA	: '*' ;	
DIVIDIDO 	: '/' ;

NUMERO		: MENOS? (DIGITO)+;
ID			: LETRA (LETRA|NUMERO)*;
CADENA		: ('"' ( options {greedy=false;} : . )* '"')	;